<?php

class HttpAjax extends TPage {
//<editor-fold defaultstate="collapsed" desc="VerificarDuplicidadUsername">
  /**
   * verificar si el username ya existe en base de datos
   * @return string
   * @author VSR, 01/01/2011
   */
  private function verificarDuplicidadUsername(){
    $existe = "0";
    $id = urldecode(Utilidades::isNull($this->Request["id"],"-1"));
    $valor = urldecode(Utilidades::isNull($this->Request["valor"],"-1"));

    try {
      $existe = Usuario::verificarDuplicidad($id, $valor, "Username");
    } catch (Exception $e) {
      $existe = "0";
    }
    return $existe;
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="VerificarDuplicidadRut">
  /**
   * verificar si el rut ya existe en base de datos
   * @return string
   * @author VSR, 14/05/2012
   */
  private function verificarDuplicidadRut(){
    $existe = "0";
    $id = urldecode(Utilidades::isNull($this->Request["id"],"-1"));
    $valor = urldecode(Utilidades::isNull($this->Request["valor"],"-1"));

    try {
      Utilidades::separarRut($valor, $dv);
      $existe = Usuario::verificarDuplicidad($id, $valor, "Rut");
    } catch (Exception $e) {
      $existe = "0";
    }
    return $existe;
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="ObtenerLlavePerfil">
  /**
   * obtiene la llave relacionada al perfil
   * @return <type>
   * @author VSR, 01/01/2011
   */
  private function obtenerLlavePerfil() {
    $idPerfil = Utilidades::isNull($this->Request["idp"], "-1");

    try {
      $oPerfil = new Perfil($idPerfil);
      if ($oPerfil->getExiste()) {
        $html = $oPerfil->getLlave();
      } else {
        $html = Sistema::CODIGO_SQL_ERROR;
      }
    } catch (Exception $e) {
      $html = Sistema::CODIGO_SQL_ERROR;
    }
    return $html;
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="DibujarMatrizPermiso">
  /**
   * dibuja la matriz de permisos
   * @param <type> $idUsuario
   * @author VSR, 01/01/2011
   */
  private function dibujarMatrizPermiso($idUsuario) {
    $html = "";
    $idPerfil = urldecode(Utilidades::isNull($this->Request["idp"], "-1"));
    $eliminarAsignaciones = urldecode(Utilidades::isNull($this->Request["eli"], "0"));
    $themeBaseUrl = urldecode(Utilidades::isNull($this->Request["themeBaseUrl"], ""));
    $provieneDesde = urldecode(Utilidades::isNull($this->Request["provieneDesde"], "Admin"));

    try {
      $arr = Perfil::obtenerPaginasAsociadas($idPerfil, $idUsuario);
      //dibuja la matriz
      $html = $this->dibujarMatriz($arr, $eliminarAsignaciones, $themeBaseUrl, $provieneDesde);
    } catch (Exception $e) {
      $html = Sistema::CODIGO_SQL_ERROR;
    }
    return $html;
  }

  /**
   * dibuja la matriz de permiso asociada al perfil
   * @param <type> $arr
   * @param <type> $desmarcarTodasFunciones
   * @param <type> $themeBaseUrl
   * @return <type>
   * @author VSR, 01/01/2011
   */
  private function dibujarMatriz($arr, $desmarcarTodasFunciones, $themeBaseUrl, $provieneDesde) {
    $html = "";
    $htmlSinRegistro = "<span class=\"cssTextoNormal\"><i>No tiene p&aacute;ginas asociadas el perfil</i></span>";
    $sb = new StringBuilder();

    try {
      if (is_null($arr)) {
        $html = $htmlSinRegistro;
      } else {
        $arrCategorias = $arr[Perfil::ARRAY_LISTADO_CATEGORIAS];
        $totalRegistros = count($arrCategorias);
        if ($totalRegistros == 0) {
          $html = $htmlSinRegistro;
        } else {
          $sb->appendLine("<div id=\"hContenedorCategorias\" class=\"cssMatrizPermisoContenedorCategorias\">");
          $sb->appendLine("  <input type=\"hidden\" id=\"txtTotalCategorias\" value=\"".$totalRegistros."\" />");
          //recorre las categorias para ir dibujando su contenido
          for ($i = 0; $i <= $totalRegistros - 1; $i++) {
            $row = $arrCategorias[$i];
            $idCategoria = $row["IdCategoria"];
            $nombreCategoria = $row["NombreCategoria"];
            $htmlCategorias = $this->dibujarCategorias($arr, $idCategoria, $nombreCategoria, $i + 1, $desmarcarTodasFunciones, $themeBaseUrl, $provieneDesde);
            $sb->appendLine($htmlCategorias);
          }
          $sb->appendLine("</div>");
          //retorna valor
          $html = $sb->toString();
        }
      }
    } catch (Exception $e) {
      $html = Sistema::CODIGO_SQL_ERROR;
    }
    return $html;
  }

  /**
   * dibuja las categorias con sus paginas
   * @param <type> $arr
   * @param <type> $idCategoria
   * @param <type> $nombreCategoria
   * @param <type> $indiceCicloCategoria
   * @param <type> $desmarcarTodasFunciones
   * @return <type>
   * @author VSR, 01/01/2011
   */
  private function dibujarCategorias($arr, $idCategoria, $nombreCategoria, $indiceCicloCategoria, $desmarcarTodasFunciones, $themeBaseUrl, $provieneDesde) {
    $html = "";
    $htmlSinRegistro = "<span class=\"cssTextoNormal\"><i>No tiene p&aacute;ginas asociadas a la categor&iacute;a</i></span>";
    $sb = new StringBuilder();
    $prefijoControl = "Cat".$indiceCicloCategoria;
    $expandirContraer = "<span id=\"".$prefijoControl."_holderImagenExpandirContraer\"><a href=\"javascript:;\" onclick=\"expandirContraer('".$prefijoControl."_holderImagenExpandirContraer','".$prefijoControl."_hContenedorPagina','contraer','','','".$themeBaseUrl."');\"><span class=\"ico16-contraer\"><img src=\"".$themeBaseUrl."/img/_blank.gif\" class=\"ico16ExpandirContraer\" alt=\"\" /></span></a>&nbsp;</span>";

    try {
      //obtiene listado de paginas
      $arrListadoPaginas = $arr[Perfil::ARRAY_LISTADO_PAGINAS];
      if (is_null($arrListadoPaginas)) {
        $html = $htmlSinRegistro;
      } else {
        //filtra la vista por la categoria
        $arrFiltrado = Utilidades::arrayRowFilter($arrListadoPaginas, "IdCategoria == '".$idCategoria."'");
        //convierte la vista en dataset
        $totalRegistros = count($arrFiltrado);
        if ($totalRegistros == 0) {
          $html = $htmlSinRegistro;
        } else {
          $sb->appendLine("<div id=\"".$prefijoControl."_hTituloCategoria\" class=\"cssMatrizPermisoTituloCategoria\">".$expandirContraer."&nbsp;".$nombreCategoria."</div>");
          $sb->appendLine("<div id=\"".$prefijoControl."_hContenedorPagina\" class=\"cssMatrizPermisoContenedorPaginas\">");
          $sb->appendLine("  <input type=\"hidden\" id=\"".$prefijoControl."_txtTotalPaginas\" value=\"".$totalRegistros."\" />");

          if($totalRegistros > 0) {
            $sb->appendLine("<ul class=\"floatLeftLI\">");

            //recorre las paginas para ir dibujando su contenido
            for($i = 0; $i <= $totalRegistros - 1; $i++) {
              $row = $arrFiltrado[$i];
              $idPagina = $row["IdPagina"];
              $tituloPagina = $row["TituloPagina"];
              $nombreClase = $row["NombreClase"];
              $htmlPaginas = $this->dibujarPaginas($arr, $idCategoria, $idPagina, $tituloPagina, $indiceCicloCategoria, $i + 1, $desmarcarTodasFunciones, $themeBaseUrl);
              $style = ($provieneDesde == "Cliente" && Utilidades::startsWith($nombreClase, "Adm")) ? "style=\"display:none;\"" : "";

              $sb->appendLine("<li class=\"cssMatrizPermisoSeparacionItemPaginas\" $style>".$htmlPaginas."</li>");
            }
            $sb->appendLine("</ul>");
            $sb->appendLine("<div class=\"clearBoth\"></div>");
          }

          $sb->appendLine("</div>");
          $sb->appendLine("<div class=\"clearBoth\" style=\"width:100%;height:1px\"></div>");
          //retorna valor
          $html = $sb->toString();
        }
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
    return $html;
  }

  /**
   * dibuja las paginas con sus funciones
   * @author VSR, 01/01/2011
   */
  private function dibujarPaginas($arr, $idCategoria, $idPagina, $tituloPagina, $indiceCicloCategoria, $indiceCicloPagina, $desmarcarTodasFunciones, $themeBaseUrl) {
    $html = "";
    $htmlSinRegistro = "<span class=\"cssTextoNormal\"><i>No tiene funciones asociadas a la p&aacute;gina</i></span>";
    $tagCheck = "<span class=\"cssInput {#CHECK_SELECCIONADO}\" style=\"padding-right:10px;\"><input id=\"{#ID_CHECK}\" type=\"checkbox\" name=\"{#NAME_CHECK}\" value=\"{#VALUE_CHECK}\" {#CHECKED} /><label for=\"{#ID_CHECK}\">{#LABEL_CHECK}</label></span>";
    $sb = new StringBuilder();
    $prefijoControl = "Cat".$indiceCicloCategoria."_Pag".$indiceCicloPagina;
    $expandirContraer = "<span id=\"".$prefijoControl."_holderImagenExpandirContraer\"><a href=\"javascript:;\" onclick=\"expandirContraer('".$prefijoControl."_holderImagenExpandirContraer','".$prefijoControl."_hContenedorFunciones','contraer','','','".$themeBaseUrl."');\"><span class=\"ico16-contraer\"><img src=\"".$themeBaseUrl."/img/_blank.gif\" class=\"ico16ExpandirContraer\" alt=\"\" /></span></a></span>";
    $contadorFuncionesAsignadas = 0;
    $idEntidad = urldecode(Utilidades::isNull($this->Request["ide"], "0"));

    try {
      //obtiene listado de funciones
      $arrListadoFunciones = $arr[Perfil::ARRAY_LISTADO_FUNCIONES_PAGINA];
      if (is_null($arrListadoFunciones)) {
        $html = $htmlSinRegistro;
      } else {
        //filtra la vista por la categoria
        $arrFiltrado = Utilidades::arrayRowFilter($arrListadoFunciones, "IdCategoria == '".$idCategoria."' && IdPagina == '".$idPagina."'");
        //convierte la vista en dataset
        $totalRegistros = count($arrFiltrado);

        if ($totalRegistros == 0) {
          $html = $htmlSinRegistro;
        } else {
          //setea valores
          $expandirContraer = "";

          $sb->appendLine("<div id=\"".$prefijoControl."_hTitulo_Pagina\" class=\"cssMatrizPermisoTituloPagina\">".$expandirContraer."&nbsp;<input type=\"checkbox\" id=\"".$prefijoControl."_all\" name=\"".$prefijoControl."_all\" class=\"chk-all\">&nbsp;".$tituloPagina."</div>");
          $sb->appendLine("<div id=\"".$prefijoControl."_hContenedorFunciones\" class=\"cssMatrizPermisoContenedorFunciones\" style=\"display:block; border:solid 0px #e5e5e5\">");
          $sb->appendLine("  <input type=\"hidden\" id=\"".$prefijoControl."_txtTotalFunciones\" value=\"".$totalRegistros."\" />");
          $sb->appendLine("  <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">");

          //recorre las paginas para ir dibujando su contenido
          for($i = 0; $i <= $totalRegistros - 1; $i++) {
            $row = $arrFiltrado[$i];
            $tagCheckAux = $tagCheck;
            $idFuncion = $row["IdFuncion"];
            $nombreFuncion = $row["NombreFuncion"];
            $perteneceFuncion = $row["PerteneceFuncion"];
            //si no tiene funciones asignadas entonces retorna mensaje
            if ($totalRegistros == 1 && $idFuncion == "0") {
              $sb->appendLine("    <tr valign=\"top\">");
              $sb->appendLine("      <td>$htmlSinRegistro</td>");
              $sb->appendLine("    </tr>");
            } else {
              //construye nombres especiales
              $idCheck = $prefijoControl."_chkFuncion".($i + 1);
              $nameCheck = "chk_GrupoFunciones[]";
              $checked = ($desmarcarTodasFunciones == "1" || $perteneceFuncion == "0") ? "" : "checked=\"checked\"";
              $checkedDestacado = ($desmarcarTodasFunciones == "1" || $perteneceFuncion == "0") ? "" : "cssMatrizPermisoCheckDestacado";
              if ($desmarcarTodasFunciones == "0" && $perteneceFuncion == "1") { $contadorFuncionesAsignadas++; }

              //reemplaza las marcas especiales
              $tagCheckAux = str_replace("{#ID_CHECK}", $idCheck, $tagCheckAux);
              $tagCheckAux = str_replace("{#NAME_CHECK}", $nameCheck, $tagCheckAux);
              $tagCheckAux = str_replace("{#VALUE_CHECK}", $idFuncion, $tagCheckAux);
              $tagCheckAux = str_replace("{#LABEL_CHECK}", $nombreFuncion, $tagCheckAux);
              $tagCheckAux = str_replace("{#CHECKED}", $checked, $tagCheckAux);
              $tagCheckAux = str_replace("{#CHECK_SELECCIONADO}", $checkedDestacado, $tagCheckAux);

              //agrega nuevo string
              $sb->appendLine("    <tr valign=\"top\">");
              $sb->appendLine("      <td>$tagCheckAux</td>");
              $sb->appendLine("    </tr>");
            }
          }
          $sb->appendLine("  </table>");
          $sb->appendLine("  <input type=\"hidden\" id=\"".$prefijoControl."_txtTotalFuncionesAsignadas\" value=\"".$contadorFuncionesAsignadas."\" />");
          $sb->appendLine("</div>");
          //retorna valor
          $html = $sb->toString();
        }
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
    return $html;
  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="EliminarUsuario">
  /**
   * elimna un usuario
   * @param <type> $idUsuario
   * @return <type>
   * @author VSR, 01/01/2011
   */
  private function eliminarUsuario($idUsuario, $oUsuario) {
    $retorno = "";

    try {
      $idUsuarioConectado = $oUsuario->getId();
      $retorno = Usuario::eliminacionLogica($idUsuario, $idUsuarioConectado);
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
    }
    return $retorno;
  }

//</editor-fold>

  public function onLoad($param) {
    parent::onLoad($param);
    $opcion = urldecode($this->Request["op"]);
    $idUsuario = urldecode($this->Request["idUsuario"]);
    $response = $this->getResponse();

    try {
      $session = new THttpSession();
      $session->open();
      $oUsuario = Utilidades::obtenerSessionPorNombre(Usuario::NOMBRE_ENTIDAD);
      switch ($opcion) {
        case "Usuario.Username":
          $respuesta = $this->verificarDuplicidadUsername();
          break;
        case "Usuario.Rut":
          $respuesta = $this->verificarDuplicidadRut();
          break;
        case "ObtenerLlavePerfil":
          $respuesta = $this->obtenerLlavePerfil();
          break;
        case "DibujarMatrizPermiso":
          $respuesta = $this->dibujarMatrizPermiso($idUsuario);
          break;
        case "EliminarUsuario":
          $respuesta = $this->eliminarUsuario($idUsuario, $oUsuario);
          break;
        default:
          $respuesta = Sistema::CODIGO_SQL_ERROR;
          break;
      }
      $response->write($respuesta);
    } catch (Exception $e) {
      $response->write(Sistema::CODIGO_SQL_ERROR);
    }
  }
  
}

?>
